// ============================== 导入依赖 ============================== //

// ============================== 导出数学工具 ============================== //

/**
 * 简单解决丢失精度问题
 * 保留 12 位小数，再去掉末尾的 0
 * 支持传入任意类型参数，转换为 +data || 0
 */
export default {
  /**
   * 加
   *
   * @param {*} a 被加数
   * @param {*} b 加数
   *
   * @return {Number} 和数
   */
  add(a, b) {
    return +(trans(a) + trans(b)).toFixed(12)
  },

  /**
   * 减
   *
   * @param {Number} a 被减数
   * @param {*} b 减数
   *
   * @return {Number} 差数
   */
  sub(a, b) {
    return +(trans(a) - trans(b)).toFixed(12)
  },

  /**
   * 乘
   *
   * @param {Number} a 被乘数
   * @param {*} b 乘数
   *
   * @return {Number} 积数
   */
  mul(a, b) {
    return +(trans(a) * trans(b)).toFixed(12)
  },

  /**
   * 除
   *
   * @param {Number} a 被除数
   * @param {*} b 除数
   *
   * @return {Number} 商数
   */
  div(a, b) {
    if (!b) return isNaN
    return +(trans(a) / trans(b)).toFixed(12)
  },
}

// ============================== 内部方法 ============================== //

/**
 * 转换为数字
 */
const trans = (data) => +data || 0
